Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_backend_integrity.py

Displaying Raw • Download


tests/backend/test_backend_integrity.py 30ef8856dc7cfc97b8e8c6de36f7de33bd32cc99 (30ef8856) Text, 2.77 KB

Tff7b72import T7ee787hashlib
Tff7b72import T7ee787json
Tff7b72import T7ee787os
Tff7b72import T7ee787shutil
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787unittest
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path


Tff7b72class T56d364TestBackendIntegrityTb4b4b4(Te6edf3unittestTff7b72.Td2a8ffTestCaseTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffsetUpTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftest_dir Tff7b72= Te6edf3PathTb4b4b4(Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbuild_dir Tff7b72= Tff7b72selfTff7b72.Td2a8fftest_dir Tff7b72/ Ta5d6ff"Ta5d6ffbuildTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffexeTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffbuild_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffelectron_dir Tff7b72= Tff7b72selfTff7b72.Td2a8fftest_dir Tff7b72/ Ta5d6ff"Ta5d6ffelectronTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffelectron_dirTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)

T8b949e# Create some files in build/exe
Tff7b72selfTff7b72.Td2a8fffiles Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffReticulumMeshChatXTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffbinary contentTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflib/some_lib.soTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fflibrary contentTa5d6ff"Tb4b4b4,
Tb4b4b4}

Tff7b72for Te6edf3rel_pathTb4b4b4, Te6edf3content Tff7b72in Tff7b72selfTff7b72.Td2a8fffilesTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72= Tff7b72selfTff7b72.Td2a8ffbuild_dir Tff7b72/ Te6edf3rel_path
Te6edf3pTff7b72.Td2a8ffparentTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3pTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3contentTb4b4b4)

Tff7b72def Td2a8fftearDownTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Tff7b72selfTff7b72.Td2a8fftest_dirTb4b4b4)

Tff7b72def Td2a8ffgenerate_manifestTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3manifest Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ff_metadataTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6ffdateTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff2026-01-03Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff12:00:00Ta5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6fffilesTa5d6ff"Tb4b4b4: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}
Tff7b72for Te6edf3rootTb4b4b4, Te6edf3_Tb4b4b4, Te6edf3files Tff7b72in Te6edf3osTff7b72.Td2a8ffwalkTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbuild_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Te6edf3full_path Tff7b72= Te6edf3PathTb4b4b4(Te6edf3rootTb4b4b4) Tff7b72/ Te6edf3file
Te6edf3rel_path Tff7b72= Tffa657strTb4b4b4(Te6edf3full_pathTff7b72.Td2a8ffrelative_toTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbuild_dirTb4b4b4)Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3full_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Tffa657hash Tff7b72= Te6edf3hashlibTff7b72.Td2a8ffsha256Tb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffhexdigestTb4b4b4(Tb4b4b4)
Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6fffilesTa5d6ff"Tb4b4b4]Tb4b4b4[Te6edf3rel_pathTb4b4b4] Tff7b72= Tffa657hash

Te6edf3manifest_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffelectron_dir Tff7b72/ Ta5d6ff"Ta5d6ffbackend-manifest.jsonTa5d6ff"
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3jsonTff7b72.Td2a8ffdumpTb4b4b4(Te6edf3manifestTb4b4b4, Te6edf3fTb4b4b4)
Tff7b72return Te6edf3manifest_path

Tff7b72def Td2a8fftest_manifest_generationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test that the build script logic produces a valid manifest."""
Te6edf3manifest_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffgenerate_manifestTb4b4b4(Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3fTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6fffilesTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, T79c0ff2Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ffReticulumMeshChatXTa5d6ff"Tb4b4b4, Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6fffilesTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6fflib/some_lib.soTa5d6ff"Tb4b4b4, Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6fffilesTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ff_metadataTa5d6ff"Tb4b4b4, Te6edf3manifestTb4b4b4)

Tff7b72def Td2a8fftest_tampering_detection_logicTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test that modifying a file changes its hash (logic check)."""
Te6edf3manifest_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffgenerate_manifestTb4b4b4(Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3fTb4b4b4)

Te6edf3old_hash Tff7b72= Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6fffilesTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffReticulumMeshChatXTa5d6ff"Tb4b4b4]

T8b949e# Tamper
Tff7b72with Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbuild_dir Tff7b72/ Ta5d6ff"Ta5d6ffReticulumMeshChatXTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ffmalicious codeTa5d6ff"Tb4b4b4)

Tff7b72with Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbuild_dir Tff7b72/ Ta5d6ff"Ta5d6ffReticulumMeshChatXTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3new_hash Tff7b72= Te6edf3hashlibTff7b72.Td2a8ffsha256Tb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffhexdigestTb4b4b4(Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffassertNotEqualTb4b4b4(Te6edf3old_hashTb4b4b4, Te6edf3new_hashTb4b4b4)


Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3unittestTff7b72.Td2a8ffmainTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────